package blancosMikel.model.dao;

import java.sql.SQLException;
import java.util.ArrayList;

import blancosMikel.controller.beans.usuariosBeans;

public class usuariosDAO extends SigaabmDAO {

	public void getUsuario(usuariosBeans usuario) throws Exception {
		StringBuilder query = new StringBuilder();

		try {
			query.append("select * from usuarios Where usuario='")
					.append(usuario.getUsuario()).append("'");

			conn = this.getConnectionMYSQL();
			ps = conn.prepareStatement(query.toString());
			rs = ps.executeQuery();
			System.out.println("dao.usuarios.getUsuario.Ejecutado----------> "
					+ query.toString());

			if (rs.next()) {
				usuario.setId_usuario(rs.getInt(1));
				usuario.setUsuario(rs.getString(6));
				usuario.setSecreta(rs.getString(7));
				usuario.setNombre(rs.getString(2));
				usuario.setPaterno(rs.getString(3));
				usuario.setMaterno(rs.getString(4));
				usuario.setEmail(rs.getString(5));
				usuario.setRol(rs.getString(8));
				System.out
						.println("dao.usuarios.getUsuario----------> Cargado");
			} else {
				throw new Exception("Error usuario no existe.");
			}
		} catch (SQLException error) {
			throw new Exception(error.getMessage());
		} catch (Exception error) {
			throw new Exception(error.getMessage());
		} finally {
			close(conn);
			close(ps);
			close(rs);
		}
	}

	public boolean validarUsuario(usuariosBeans usuario) throws Exception {
		StringBuilder query = new StringBuilder();
		boolean resp = false;

		try {
			query.append("select * from usuarios Where usuario='")
					.append(usuario.getUsuario()).append("'");

			conn = this.getConnectionMYSQL();
			ps = conn.prepareStatement(query.toString());
			rs = ps.executeQuery();
			System.out
					.println("dao.usuarios.validarUsuario.Ejecutado----------> "
							+ query.toString());

			if (rs.next()) {
				resp = true;
				System.out
						.println("dao.usuarios.validarUsuario----------> encontrado");
			} else {
				resp = false;
			}
		} catch (SQLException error) {
			throw new Exception(error.getMessage());
		} catch (Exception error) {
			throw new Exception(error.getMessage());
		} finally {
			close(conn);
			close(ps);
			close(rs);
		}
		return resp;
	}

	public boolean validarEmail(usuariosBeans usuario) throws Exception {
		StringBuilder query = new StringBuilder();
		boolean resp = false;

		try {
			query.append("select * from usuarios Where email='")
					.append(usuario.getEmail()).append("'");

			conn = this.getConnectionMYSQL();
			ps = conn.prepareStatement(query.toString());
			rs = ps.executeQuery();
			System.out
					.println("dao.usuarios.validarEmail.Ejecutado----------> "
							+ query.toString());

			if (rs.next()) {
				resp = true;
				System.out
						.println("dao.usuarios.validarEmail----------> Encontrado");
			} else {
				resp = false;
			}
		} catch (SQLException error) {
			throw new Exception(error.getMessage());
		} catch (Exception error) {
			throw new Exception(error.getMessage());
		} finally {
			close(conn);
			close(ps);
			close(rs);
		}
		return resp;
	}

	public void buscarEmail(usuariosBeans usuario) throws Exception {
		StringBuilder query = new StringBuilder();

		try {
			query.append("select * from usuarios Where email='")
					.append(usuario.getEmail()).append("'");

			conn = this.getConnectionMYSQL();
			ps = conn.prepareStatement(query.toString());
			rs = ps.executeQuery();
			System.out.println("dao.usuarios.getUsuario.Ejecutado----------> "
					+ query.toString());

			if (rs.next()) {
				usuario.setId_usuario(rs.getInt(1));
				usuario.setUsuario(rs.getString(6));
				usuario.setSecreta(rs.getString(7));
				usuario.setNombre(rs.getString(2));
				usuario.setPaterno(rs.getString(3));
				usuario.setMaterno(rs.getString(4));
				usuario.setEmail(rs.getString(5));
				usuario.setRol(rs.getString(8));
				System.out
						.println("dao.usuarios.getUsuario----------> Cargado");
			} else {
				throw new Exception("Error email no existe.");
			}
		} catch (SQLException error) {
			throw new Exception(error.getMessage());
		} catch (Exception error) {
			throw new Exception(error.getMessage());
		} finally {
			close(conn);
			close(ps);
			close(rs);
		}
	}

	public void buscarUsuario(usuariosBeans usuario) throws Exception {
		StringBuilder query = new StringBuilder();

		try {
			query.append("select * from usuarios Where id_usuario='")
					.append(usuario.getId_usuario()).append("'");

			conn = this.getConnectionMYSQL();
			ps = conn.prepareStatement(query.toString());
			rs = ps.executeQuery();
			System.out.println("dao.usuarios.getUsr.Ejecutado----------> "
					+ query.toString());

			if (rs.next()) {
				usuario.setUsuario(rs.getString(6));
				usuario.setSecreta(rs.getString(7));
				usuario.setNombre(rs.getString(2));
				usuario.setPaterno(rs.getString(3));
				usuario.setMaterno(rs.getString(4));
				usuario.setEmail(rs.getString(5));
				usuario.setRol(rs.getString(8));
				System.out.println("dao.usuarios.getUsr----------> Cargado");
			} else {
				throw new Exception("Error usuario no existe.");
			}

		} catch (SQLException error) {
			throw new Exception(error.getMessage());
		} catch (Exception error) {
			throw new Exception(error.getMessage());
		} finally {
			close(conn);
			close(ps);
			close(rs);
		}
	}

	public ArrayList<usuariosBeans> getCatalogo() throws SQLException {
		ArrayList<usuariosBeans> usuariosList = new ArrayList<usuariosBeans>();
		try {
			StringBuilder query = new StringBuilder();
			query.append("Select * from usuarios order by rol");
			conn = this.getConnectionMYSQL();
			ps = conn.prepareStatement(query.toString());
			rs = ps.executeQuery();
			System.out.println("dao.usuarios.getCatalogo.Ejecutado----------> "
					+ query.toString());

			while (rs.next()) {
				usuariosBeans usuario = new usuariosBeans();
				usuario.setId_usuario(rs.getInt(1));
				usuario.setNombre(rs.getString(2));
				usuario.setPaterno(rs.getString(3));
				usuario.setMaterno(rs.getString(4));
				usuario.setEmail(rs.getString(5));
				usuario.setUsuario(rs.getString(6));
				usuario.setSecreta(rs.getString(7));
				usuario.setRol(rs.getString(8));
				usuariosList.add(usuario);
			}
			System.out.println("dao.usuarios.getCatalogo----------> Cargado");
		} catch (Exception e) {
			System.out.println("usuariosDao...Error..." + e.getMessage());
		} finally {
			close(conn);
			close(ps);
			close(rs);
		}
		return usuariosList;
	}

	public int nextId() {
		int id = 0;
		try {
			StringBuilder query = new StringBuilder();
			query.append("Select id_usuario from usuarios");
			conn = this.getConnectionMYSQL();
			ps = conn.prepareStatement(query.toString());
			rs = ps.executeQuery();
			System.out.println("dao.usuarios.nextId.Ejecutado----------> "
					+ query.toString());

			while (rs.next()) {
				if (id < rs.getInt(1)) {
					id = rs.getInt(1);
				}
			}
			System.out.println("dao.usuarios.nextId----------> Cargado");
		} catch (Exception e) {
			System.out.println("usuariosDao...Error..." + e.getMessage());
		} finally {
			close(conn);
			close(ps);
			close(rs);
		}
		return id + 1;
	}

	public void insertUsuario(usuariosBeans bean) throws Exception {
		try {
			StringBuilder query = new StringBuilder();
			conn = this.getConnectionMYSQL();

			query.append("INSERT INTO usuarios ")
					.append("(id_usuario,nombre,paterno,materno,email,usuario,secreta,rol) ")
					.append("values (").append(bean.getId_usuario())
					.append(",'").append(bean.getNombre()).append("','")
					.append(bean.getPaterno()).append("','")
					.append(bean.getMaterno()).append("','")
					.append(bean.getEmail()).append("','")
					.append(bean.getUsuario()).append("','")
					.append(bean.getSecreta()).append("','")
					.append(bean.getRol()).append("')");

			st = conn.createStatement();
			st.executeUpdate(query.toString());
			System.out
					.println("dao.usuarios.insertUsuario.Ejecutado----------> "
							+ query.toString());
			System.out
					.println("dao.usuarios.insertUsuario----------> insertado");

		} catch (SQLException error) {
			throw new Exception(error.getMessage());
		} catch (Exception error) {
			throw new Exception(error.getMessage());
		} finally {
			close(conn);
			close(st);
		}
	}

	public void deleteUsuario(usuariosBeans bean) throws Exception {
		try {
			StringBuilder query = new StringBuilder();
			conn = this.getConnectionMYSQL();

			query.append("DELETE FROM usuarios where id_usuario=").append(
					bean.getId_usuario());

			st = conn.createStatement();
			st.executeUpdate(query.toString());
			System.out
					.println("dao.usuarios.deleteUsuario.Ejecutado----------> "
							+ query.toString());
			System.out
					.println("dao.usuarios.deleteUsuario----------> eliminado");

		} catch (SQLException error) {
			throw new Exception(error.getMessage());
		} catch (Exception error) {
			throw new Exception(error.getMessage());
		} finally {
			close(conn);
			close(st);
		}
	}

	public void updateUsuario(usuariosBeans bean) throws Exception {
		try {
			StringBuilder query = new StringBuilder();
			conn = this.getConnectionMYSQL();

			query.append("UPDATE usuarios SET ").append("nombre='")
					.append(bean.getNombre()).append("',paterno='")
					.append(bean.getPaterno()).append("',materno='")
					.append(bean.getMaterno()).append("',email='")
					.append(bean.getEmail()).append("',usuario='")
					.append(bean.getUsuario()).append("',secreta='")
					.append(bean.getSecreta()).append("',rol='")
					.append(bean.getRol()).append("' where id_usuario=")
					.append(bean.getId_usuario());

			st = conn.createStatement();
			st.executeUpdate(query.toString());
			System.out
					.println("dao.usuarios.updateUsuario.Ejecutado----------> "
							+ query.toString());
			System.out
					.println("dao.usuarios.updateUsuario----------> actualizado");

		} catch (SQLException error) {
			throw new Exception(error.getMessage());
		} catch (Exception error) {
			throw new Exception(error.getMessage());
		} finally {
			close(conn);
			close(st);
		}
	}
	
	public ArrayList<usuariosBeans> getUsuarioParaVenta(String busqueda) throws SQLException {
		ArrayList<usuariosBeans> usuariosList = new ArrayList<usuariosBeans>();
		try {
			StringBuilder query = new StringBuilder();
			query.append("Select * from usuarios where " +
					"nombre LIKE '%"+busqueda +"%' OR " +
					"paterno LIKE '%"+busqueda +"%' OR " +
					"materno LIKE '%"+busqueda +"%'; ");
                      
			conn = this.getConnectionMYSQL();
			ps = conn.prepareStatement(query.toString());
			rs = ps.executeQuery();
			System.out.println("dao.usuarios.getCatalogo.Ejecutado----------> "
					+ query.toString());

			while (rs.next()) {
				usuariosBeans usuario = new usuariosBeans();
				usuario.setId_usuario(rs.getInt(1));
				usuario.setNombre(rs.getString(2));
				usuario.setPaterno(rs.getString(3));
				usuario.setMaterno(rs.getString(4));
				usuario.setEmail(rs.getString(5));
				usuario.setUsuario(rs.getString(6));
				usuario.setSecreta(rs.getString(7));
				usuario.setRol(rs.getString(8));
				usuariosList.add(usuario);
			}
			System.out.println("dao.usuarios.getCatalogo----------> Cargado");
		} catch (Exception e) {
			System.out.println("usuariosDao...Error..." + e.getMessage());
		} finally {
			close(conn);
			close(ps);
			close(rs);
		}
		return usuariosList;
	}
}
